#include "queen_caculate.h"   // 8皇后问题导入
#include "queen_decomposition.h"
#include "dll_caculatetemplate.h"
#include <QtMath>

DLL_CaculateTemplate::DLL_CaculateTemplate()
{
}

// 服务器 读取数据 分割问题
QStringList read(QString data)
{
   QStringList returndata;
   //returndata.append("6666");
   // 读取8皇后问题规模
   int tasksize;
   int problemsize= data.toInt();
   if(problemsize<=16)
   {
       tasksize=problemsize;
   }
   else
   {
    double result=qPow(8,problemsize-16);
     tasksize=(int)result*problemsize;
   }
   if(tasksize<0)
   {
       tasksize = problemsize;
   }
    queen_decomposition queen=queen_decomposition(problemsize,tasksize);
    QList<QStringList>  problemdata;
    problemdata=queen.decomposition_problem();
    // 进行处理
    for(int a=0;a<problemdata.size();a++){
        returndata.append(QString::number(problemsize)+"-"+problemdata[a].join("="));
    }
   return returndata;
}


// 计算节点 处理问题
QString handle(QString data)
{
    // 获取问题大小
    QStringList problem=data.split("-");
    vector <short> init_data;
    if(data.size()<2)
    {
         qDebug()<<"任务数据损坏！！"<<"数据内容:"<<problem<<endl;
        return "0";
    }
    bool ok;
    int  problem_size=problem[0].toInt(&ok,10);
    if(ok==false)
    {
         qDebug()<<"女皇棋盘大小转换失败!!";
         return "0";
    }

    if(problem[1].size()>0)
    {
        QStringList save=problem[1].split("=");
        for(int a=0;a<save.size();a++)
        {
            bool ok;
            init_data.push_back(save[a].toShort(&ok,10));
            if(ok==false)
            {
                qDebug()<<"转换为short时失败!!"<<endl;
                return "0";
            }
        }
        queen_caculate queen(problem_size);
        queen.init(init_data);
        return QString::number(queen.sum);
    }


}

// 服务器 处理结果
QString sum(QStringList data)
{
    QString result;
    int num=0;
    for(int a=0;a<data.size();a++)
    {
       num+=data[a].toLongLong();
    }
    result=QString::number(num);
    return result;
}
